<?php
/**
 * Functions
 *
 * @category librairies
 * @package librairies/
 *
 * @author Mickaël CASTANHEIRO
 * @version 1.0
 */

/**
 * Fonction qui échappe les caractères spéciaux d'une chaine
 * @param string Chaine à échapper
 * @param string caractère de séparation
 */
function escapeString($_string, $_separator='-') { 
    if (empty($_string)) return '';
    $_string = strtr( utf8_decode($_string), utf8_decode("ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"),"AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" );
    $_string = strtr(strtolower($_string), utf8_decode(' ,_\''), $_separator.$_separator.$_separator.$_separator);
    $_string = preg_replace('![^a-z0-9-]!','',$_string);

    if ( !empty($_separator) )
	$_string = preg_replace('!['.$_separator.']{2,}!', '-', $_string);

    return utf8_encode($_string);
}

/**
 * Génère une chaine aléatoirement
 * @param <int> Nombre de caractères de la chaine
 * @return <string>
 */
function randomString($_length = 8) {
    $string = '';
    $entireString = 'abcdefghijklmnopqrstuvwxyz0123456789';
    for ($i=0; $i<$_length; $i++) {
	$string .= $entireString{rand(0,strlen($entireString)-1)};
    }
    return $string;
}

/**
 * Indique si le dernier caractère d'une conjonction doit être apostrophé
 * @param <string> Conjonction
 * @param <string> Mot suivant
 * @return <string> Concaténation des deux
 */
function apostrophe($_c, $_string) {
    if ( in_array(escapeString($_string{0}), array('a','e','i','o','u')) )
	return substr($_c, 0, -1) . '\'' . $_string;
    else
	return $_c . ' ' . $_string;
}


/**
 * Liste les dossiers et ou fichiers d'un dossier
 * @param <string> Nom du dossier à étudier
 * @param <string> Extension des fichiers à récupérer (null pour tout, true pour dossier, false pour fichiers, string pour extension particulière)
 * @return <array> Dossiers et ou répertoires récupérés
 */
function listdir($_directory, $_extension=null) {
    $list = scandir($_directory);
    unset($list[array_search('.', $list)]);
    unset($list[array_search('..', $list)]);
    unset($list[array_search('.svn', $list)]);
  
    if ( $_extension == null ) return $list;
 
   foreach($list AS $key=>$dir) {
	if ( ($_extension === true) AND !is_dir($_directory.$dir) ) unset($list[$key]);
	elseif ( ($_extension === false) AND is_dir($_directory.$dir) ) unset($list[$key]);
	elseif ( substr($dir, strrpos($dir,'.')+1) != $_extension ) unset($list[$key]);
    }

    return array_values($list);
}

/**
 * Modifie une couleur (calcul hexadécimal) pour l'éclaircir ou l'assombrir
 * @param <string> Format FFFFFF ou FFF
 * @param <integer> Ajout, suppression
 * @return <string> Nouvelle couleur
 */
 function modifyColor($_color, $modify) {

    if ( strlen($_color) == 4 ) {
	$color1 = substr($_color, 0, 1);
	$color2 = substr($_color, 1, 1);
	$color3 = substr($_color, 2, 1);
	$_color =  $color1 . $color1 . $color2 . $color2 . $color3 . $color3;
    }

    
    for ($i=1; $i<=3; $i++) {
	${'color'.$i} = substr($_color, 2*($i-1), 2);
	${'color'.$i} = hexdec(${'color'.$i}) + $modify;
	if ( ${'color'.$i} < 0 ) ${'color'.$i} = 0;
	if ( ${'color'.$i} > 255 ) ${'color'.$i} = 255;
	${'color'.$i} = dechex(${'color'.$i});
	if ( strlen(${'color'.$i}) == 1 ) ${'color'.$i} .= '0';
    }
    return $color1 . $color2 . $color3;
 }